home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 25 / Cream of the Crop 25.iso / compress / tar321__.zip / SOURCES.ZIP / DEFINE.H < prev    next >
C/C++ Source or Header  |  1997-03-14  |  8KB  |  290 lines

  1. /* define.h - global definitions for Tar program (see file tar.c)
  2.  * Author: Shaporev T.V.
  3.  * Creation date: 14 Dec 1990
  4.  */
  5. #ifdef __ALLOCEXT__
  6. #    define EXT
  7. #    define INI(x) = x
  8. #else
  9. #    define EXT extern
  10. #    define INI(x)
  11. #endif
  12.  
  13. #define ERRARG   1
  14. #define ERINIT   2
  15. #define ERREAD   3
  16. #define EWRITE   4
  17. #define ESMALL   5
  18. #define EINTER   6
  19. #define EXIT     7
  20.  
  21. #define TRUE     1
  22. #define FALSE    0
  23. #define ERROR    (-1)
  24. #define CORRECT  0
  25. #define MAXBLOCK 32
  26. #define BLKSIZE  512
  27. #define MINTNAME 2
  28. #define MAXTNAME 100
  29. #define dimof(x) (sizeof(x)/sizeof((x)[0]))
  30. #define LC(x)    ((x)|('z'^'Z'))
  31. #define blank(c) ((c)==' ' || (c)=='\t')
  32. #define space(c) (blank(c) || (c)=='\n' || (c)=='\r')
  33. #define digit(c) ((c)>='0' && (c)<='9')
  34. #define OPTFLAG  '\200'
  35. #define OPTMASK  0177
  36.  
  37. #ifndef RMKDIR
  38. #    ifdef M_XENIX
  39. #        define RMKDIR
  40. #    endif
  41. #endif
  42. #ifndef RMKDIR
  43. #    ifdef i386
  44. #        define RMKDIR
  45. #    endif
  46. #    ifdef sun
  47. #        define RMKDIR
  48. #    endif
  49. #endif
  50.  
  51. #ifndef __TURBOC__
  52. #       include <sys/types.h>
  53. #endif
  54. #include <sys/stat.h>
  55. #ifdef MSDOS
  56. #    include "longdos.h"
  57. #endif
  58. #ifndef OM_RDONLY
  59. #    define OM_RDONLY 0
  60. #    define OM_WRONLY 1
  61. #    define OM_RDWR   2
  62. #endif
  63. #ifndef S_IREAD
  64. #      define S_IREAD  00400
  65. #    define S_IWRITE 00200
  66. #    define S_IEXEC  00100
  67. #endif
  68. #ifndef S_ISVTX
  69. #    define S_ISUID 04000
  70. #    define S_ISGID 02000
  71. #    define S_ISVTX 01000
  72. #endif
  73.  
  74. EXT struct stat sa, st;
  75. EXT long longcsum, codesize, allblock, allbytes;
  76. EXT short dmajor, dminor;
  77. EXT int allfiles;
  78. #define isfile ((sa.st_mode & S_IFMT) == S_IFREG)
  79. EXT char ndrive;
  80. #ifdef MSDOS
  81. #    define DEV_FILE 0
  82. #    define DEV_FLOP 1
  83. #    define DEV_QIC2 2
  84. #    define DEV_ASPI 3
  85.     EXT char devtype INI(DEV_FILE);
  86.     EXT char setdrive INI(FALSE);
  87. #endif
  88.  
  89. #ifdef UNIX
  90.     EXT FILE *myinp;
  91. #else
  92. #    define myinp stdin
  93. #endif
  94. EXT FILE *myout;
  95. EXT int  handle, hwrite;
  96. EXT char a_flag, x_flag, t_flag, c_flag, v_flag, u_flag, y_flag, w_flag,
  97.          i_flag, m_flag, d_flag, j_flag, s_flag, nonest, dslash, o_flag,
  98.          l_flag, cbreak, gnuzip;
  99. #ifdef UNIX
  100.     EXT char p_flag;
  101. #endif
  102.  
  103. #ifdef MSDOS
  104.     EXT char k_flag, deldrv;
  105.     EXT int filemask;
  106.     EXT char *archname INI(NULL);
  107.         EXT char *startdir INI(NULL);
  108. #endif
  109. EXT char *tarcmd INI(NULL), *responce INI(NULL), **argvector INI(NULL);
  110. EXT char *appname INI(NULL), *tapename INI(NULL);
  111. EXT long volume INI(0L);
  112.  
  113. EXT char pktype;
  114. EXT int lzwbits, ziplevel;
  115. #define PKNONE 0
  116. /*#define PKLZH 1*/
  117. #define PKfLZW 2
  118. #define PKpLZW 3
  119. #define PKZIP  4
  120. #define PKDEF  5
  121.  
  122. /* Standard tar file type flags */
  123. #define TF_OLD '\0' /* old-fashion flag - regular file */
  124. #define TF_REG '0'  /* regular file */
  125. #define TF_LNK '1'  /* link */
  126. #define TF_SYM '2'  /* symbolic link */
  127. #define TF_CHR '3'  /* character device */
  128. #define TF_BLK '4'  /* block device */
  129. #define TF_DIR '5'  /* directory */
  130. #define TF_QUE '6'  /* FIFO special */
  131. #define TF_CTG '7'  /* contiguous file */
  132.  
  133. /* GNU extensions */
  134. #define GF_DMP 'D'  /* This is a dir entry that contains
  135.                        the names of files that were in the
  136.                        dir at the time the dump was made */
  137. #define GF_LLN 'K'  /* Identifies the NEXT file on the tape
  138.                        as having a long linkname */
  139. #define GF_LNM 'L'  /* Identifies the NEXT file on the tape
  140.                        as having a long name. */
  141. #define GF_MUL 'M'  /* This is the continuation of a file
  142.                        that began on another volume */
  143. #define GF_NAM 'N'  /* For storing filenames that didn't
  144.                        fit in 100 characters */
  145. #define GF_SPR 'S'  /* This is for sparse files */
  146. #define GF_VOL 'V'  /* This file is a tape/volume header */
  147.  
  148. #define TMAGIC "ustar  "
  149. #define GMAGIC "GNUtar "
  150.  
  151. #define TXT_WORD 8
  152. #define TXT_LONG 12
  153.  
  154. #define THEAD char\
  155.     name[MAXTNAME],\
  156.     mode[TXT_WORD],\
  157.     uid[TXT_WORD],\
  158.     gid[TXT_WORD],\
  159.     size[TXT_LONG],\
  160.     mtime[TXT_LONG],\
  161.     chksum[TXT_WORD],\
  162.     filetype,\
  163.     linkname[MAXTNAME],\
  164.  
  165. typedef union {
  166.    struct {/* main/mine data */
  167.       THEAD
  168.       comment[BLKSIZE-MAXTNAME-8-8-8-12-12-8-1-MAXTNAME-12-12],
  169.       srcsum[TXT_LONG], srclen[TXT_LONG];
  170.    } m;
  171.    struct {/* System V extensions */
  172.       THEAD extent[4], allext[4], total[TXT_LONG];
  173.    } s;
  174.    struct {/* P1003 & GNU extensions */
  175.       THEAD magic[8], uname[32], gname[32],
  176.       devmajor[TXT_WORD], devminor[TXT_WORD],
  177.       /* the following fields are added gnu and NOT standard */
  178.       atime[12], ctime[12], offset[12];
  179.    } x;
  180. } header;
  181.  
  182. typedef struct _node {
  183.     struct _node *prev, *next;
  184.         union {
  185.         long time;
  186.         struct {
  187.             int inode, device, count;
  188.         } data;
  189.     } info;
  190.         char name[MINTNAME];
  191. } node;
  192.  
  193. #define pkfile (pktype == PKDEF || pktype == PKfLZW)
  194. #define PKSIZE (8*BLKSIZE)
  195. EXT int pksize INI(PKSIZE);
  196. EXT char *pk_inp INI(NULL), *pk_out INI(NULL);
  197. EXT char pklock;
  198.  
  199. EXT char *io_buf, *io_2nd;
  200. EXT int cblock;
  201.  
  202. EXT header *hblock;
  203. EXT char *scratch;
  204.  
  205. #define NONE (node *)0
  206. EXT node *timehead INI(NONE);
  207. #ifdef UNIX
  208.     EXT node *linkhead INI(NONE);
  209. #endif
  210.  
  211. #define XMAX 16
  212. EXT char *xarg[XMAX];
  213. EXT int xcnt;
  214.  
  215. int   yes_no   __ARGS__(( char ));
  216. #define YES_NO() yes_no('N')
  217.  
  218. void  outmem   __ARGS__(( FILE* ));
  219. char  *salloc  __ARGS__(( int ));
  220. char  *getbuf  __ARGS__(( int ));
  221. void  done     __ARGS__(( int ));
  222. int   initape  __ARGS__(( char* ));
  223. int   pkalloc  __ARGS__(( void ));
  224. int   runtape  __ARGS__(( void ));
  225. int   redirect __ARGS__(( void ));
  226. void  duptape  __ARGS__(( char* ));
  227. void  prmode   __ARGS__(( char, int ));
  228. int   okwork   __ARGS__(( char, char, struct stat *, char* ));
  229. void  cantopen __ARGS__(( char* ));
  230. void  savefile __ARGS__(( char* ));
  231. void  store    __ARGS__(( char* ));
  232. char  prefix   __ARGS__(( void ));
  233. int   usize    __ARGS__(( void ));
  234. short isextent __ARGS__(( short *, long *));
  235. int   ismagic  __ARGS__(( void ));
  236. void  catalog  __ARGS__(( void ));
  237. void  extract  __ARGS__(( void ));
  238. int   restore  __ARGS__(( char*));
  239. void  makelink __ARGS__(( char*, char* ));
  240. void  acctime  __ARGS__(( void ));
  241. void  uplist   __ARGS__(( void ));
  242. int   pktest   __ARGS__(( unsigned char* ));
  243. int   gethead  __ARGS__(( void ));
  244. int   inargs   __ARGS__(( int, char**, char* ));
  245. void  scantape __ARGS__(( int, char**, void(*)() ));
  246. void  backtape __ARGS__(( void ));
  247. void  extwrerr __ARGS__(( void ));
  248. header *readtape  __ARGS__(( void ));
  249. short headsum  __ARGS__(( header * ));
  250. header *steptape  __ARGS__(( void ));
  251. void  writebyte __ARGS__(( int ));
  252. long  writearch __ARGS__(( int, long, char* ));
  253. void  nullblock __ARGS__(( header * ));
  254. void  endtape  __ARGS__(( void ));
  255. int   readbyte __ARGS__(( void ));
  256. void  bacouple __ARGS__(( void ));
  257. int   readarch __ARGS__(( int, long ));
  258. node *finditem __ARGS__(( char*, node **, node * ));
  259. node *additem  __ARGS__(( char*, node *, node ** ));
  260. void  delitem  __ARGS__(( node *, node ** ));
  261. void  skipfile __ARGS__(( void ));
  262. void  percent  __ARGS__(( long, long ));
  263. #ifdef MSDOS
  264.     int  argdisk  __ARGS__(( int ));
  265.     void inidisk  __ARGS__(( void ));
  266.     int  defdev   __ARGS__(( char* ));
  267.     void logdisk  __ARGS__(( int, char*, int ));
  268.  
  269.     int  streamer __ARGS__(( int, void*, int ));
  270.     long ptr2abs  __ARGS__(( void far * ));
  271.  
  272.     int mapumode __ARGS__((int)), mapdattr __ARGS__((int));
  273.     int hasdrive __ARGS__((char*)), fnoffset __ARGS__((char*));
  274.     int pwd __ARGS__((char*)), cwd __ARGS__((char*));
  275.     void fcb2stat __ARGS__((struct stat*, unsigned char far*));
  276.         int isarchive __ARGS__((struct stat*, char*));
  277.         int _acces __ARGS__((char*, int));
  278. #    define access _acces
  279. #else
  280.     int bincall();
  281. #endif
  282. long mtime   __ARGS__((char*));
  283. int mismatch __ARGS__((char*, char*, int));
  284. int fmatch   __ARGS__((char*, char*));
  285. int envbuild __ARGS__((int, char***));
  286. int readopt  __ARGS__((int*, char***, int));
  287. int argfile  __ARGS__((int, char***, char*, char**));
  288. int buildarg __ARGS__((int, char***, char*));
  289. void revector __ARGS__((int, char***, int));
  290.